Econometría I: Varianza de Estimadores

Departamento de Economía

Carlos A. Yanes G.

2024-03-20

Paquetes con que se trabaja la sesión

R libraries

Los paquetes que vamos a utilizar y que se deben instalar para uso en clase son:

install.packages(c("tidyverse", "kableExtra", "flextable", "extrafont", "broom"))

Ejecución

No olvide que debe desde luego tener presente en su documento de R Markdown o script cargar estos paquetes.

library(pacman)
p_load(tidyverse, kableExtra, flextable, extrafont, broom)

Trabajo en R

Hoy haremos uso del cálculo de varianzas de estimadores \(\hat\beta_i\) en este caso tanto para el parámetro marginal quien acompaña a nuestra variable de control como en efecto al autónomo o \(\hat\beta_0\) que es nuestro parámetro constante.

Ademas de eso, miraremos la parte de cálculo elasticidad (tal como se hacia en microeconomía) y la parte de formas funcionales de nuestros modelos de regresión, que ayudan en gran parte a presentar mejores modelos.

Datos

Recuerde que siempre hay que preparar nuestros datos o involucrarlos en R, esto es:

Code
library(readxl) # Cargar datos de excel (xls)
datos <-read_excel("Salarios.xlsx")
Salario<-datos$wage
Experiencia<- datos$exper

Para la siguientes formulas, vamos a requerir el tamaño de la muestra (n), podemos hacerlo de la siguiente forma:

Code
# Estimamos nuestro modelo de regresión lineal
resultado <- lm(Salario ~ Experiencia, data = datos)
# Numero de observaciones:
( n <- nobs(resultado) )
[1] 935

Varianza del modelo

Varianza del residuo del modelo

Luego procedemos a calcular la varianza de nuestro residuo. Para esto

\[\widehat{\sigma}^{2}= \frac{1}{n-2} \times \sum\limits_{i=1}^{n}\mu_{i}^{2}\equiv \frac{n-1}{n-2}\times Var(\mu_{i})\]

Code
# Var.res: Varianza de los residuos (forma 1)
(var.res <- sqrt(sum(resid(resultado)^2) / (n-2)) ) 
[1] 404.5765
Code
# Sig.res: Varianza de los residuos estándar de la regresión (forma 2)
(Sig.res <- sd(resid(resultado)) * sqrt((n-1)/(n-2)) )
[1] 404.5765

Luego realizamos el calculo para los respectivos estimadores

\[SE\left ( \beta_{1} \right )=\sqrt\frac{\sigma^{2}}{\sum \limits_{i=1}^{n}\left ( x_{i} - \bar{x} \right )^{2}}=\frac{1}{\sqrt{n-1}} \cdot\frac{\sigma}{sd(x_i)}\]

Code
Sig.res / sd(datos$exper) / sqrt(n-1)
[1] 3.026148

Recuerde que la SD es

\[\sqrt{\frac{1}{n-1}\cdot \sum_{i=1}^n (x_i - \bar{x})^2}\]

Lo mismo para \(\hat\beta_0\), la formula cambia un poco, sin embargo podemos tener entonces:

\[SE\left ( \hat\beta_{0} \right )=\sqrt{\frac{\sigma^{2} \bar{x}^2 }{\sum \limits_{i=1}^{n}\left ( x_{i} - \bar{x} \right )^{2}}}=\color{#fc0317}{\frac{1}{\sqrt{n-1}} \cdot\frac{\sigma}{sd(x_i)}\cdot \sqrt{\bar{x}^2}}\]

Code
Sig.res / sd(datos$exper) / sqrt(n-1) * sqrt(mean(datos$exper^2))
[1] 37.4111

Modelo

Ya conociendo de donde sale el cálculo de cada uno, podemos entonces tenerlo en el resumen del modelo.

Code
# Modelo de Salarios
library(flextable)
mod<-lm(Salario ~ Experiencia)
mod<- as_flextable(mod) # Mejor formato de salida
mod<- add_header_lines(mod, values = "Tabla #1")
mod

Tabla #1

Estimate

Standard Error

t value

Pr(>|t|)

(Intercept)

955.605

37.411

25.543

0.0000

***

Experiencia

0.202

3.026

0.067

0.9467

Signif. codes: 0 <= '***' < 0.001 < '**' < 0.01 < '*' < 0.05

Residual standard error: 404.6 on 933 degrees of freedom

Multiple R-squared: 4.795e-06, Adjusted R-squared: -0.001067

F-statistic: 0.004474 on 933 and 1 DF, p-value: 0.9467

Coeficiente de determinación \(R^2\)

Coeficiente de determinación \(R^2\)

Trabajamos con las siguientes ecuaciones:

\[\textrm{Suma total de cuadrados} \equiv SST= \sum_{i=1}^{n} \left ( y_{i}- \bar{y} \right )^{2}\]

\[\textrm{Suma explicada de los cuadrados} \equiv SSE= \sum_{i=1}^{n} \left( \hat{y}_{i}- \bar{y} \right)^{2}\]

\[\textrm{Suma de los residuos al cuadrado} \equiv SEC= \sum_{i=1}^{n} \hat{\mu}_{i}^{2}\]

Coeficiente de determinación \(R^2\)

Estimamos nuestra predicción y error individual

Code
# Calculamos valores predichos y los residuos del modelo:
sal.hat <- fitted(resultado)
u.hat <- resid(resultado)
tab1<-cbind(sal.hat,u.hat)
head(tab1)
   sal.hat     u.hat
1 957.8314 -188.8314
2 957.8314 -149.8314
3 957.8314 -132.8314
4 958.2362 -308.2362
5 958.4386 -396.4386
6 958.4386  441.5614

Coeficiente de determinación \(R^2\)

Ya lo habíamos hecho en clases

Code
# tres formas diferentes de calcular el R^2:
sal <- datos$wage  # Usamos la variable dependiente
(var(sal.hat) / var(sal))*100 # Forma 1
[1] 0.0004794796
Code
(1 - var(u.hat) / var(sal))*100 # Forma 2
[1] 0.0004794796
Code
(cor(sal, sal.hat)^2)*100 # Forma 3
[1] 0.0004794796

Coeficiente de determinación \(R^2\)

Recuerde los criterios

\[R^{2}=\left\{\begin{matrix} >95\%&= \text{Excelente ajuste} \\ \text{Entre}\; 50\%-94\% & = \text{Muy buen ajuste}\\ \text{Entre}\; 25\%-49\% & = \text{Buen ajuste}\\ \text{Entre}\; 5\%-24\% & = \text{Ajuste regular}\\ <5\% & = \text{Ajuste muy bajo}\end{matrix}\right.\]

Si el \(R^2\) llega a ser 99%, debe empezar a preocuparse.

Formas funcionales

Formas funcionales

Debe conocer que las formas de medida inciden en la interpretación

\[\begin{aligned} \widehat{y} &= \beta_{0}+\beta_{1}x +\mu \quad \text{Lineal en niveles} \\ ln(\widehat{y}) &= \beta_{0}+\beta_{1}x +\mu \quad \text{Log-Lin} \\ \widehat{y} &= \beta_{0}+\beta_{1}lnx +\mu \quad \text{Lin-Log} \\ ln(\widehat{y}) &= \beta_{0}+\beta_{1}lnx +\mu \quad \text{Log-Log} \end{aligned}\]

Formas funcionales

Este es cambiando las opciones del lm en la parte del modelo, un ejemplo de eso es:

Code
# Para otras formas funcionales:
#Log-Lin
l1<-lm(log(wage) ~ exper, data=datos)
#Lin-Log
l2<-lm(wage ~ log(exper), data=datos)
#Log-Log
l3<-lm(log(wage) ~ log(exper), data=datos)

Formas funcionales

Code
library(huxtable)
huxreg(resultado, statistics = c(N = "nobs", R2 = "r.squared"))
(1)
(Intercept)955.605 ***
(37.411)   
Experiencia0.202    
(3.026)   
N935        
R20.000    
*** p < 0.001; ** p < 0.01; * p < 0.05.
Code
grupo <- list("Modelo Lineal" = resultado, "Modelo Log-Lin" = l1, 
             "Modelo Lin-log" = l2, "Modelo Log-Log" = l3)

huxreg(grupo, statistics = c(N = "nobs", R2 = "r.squared"),
       note = "Nota: Los resultados deben interpretarse completamente")
Modelo LinealModelo Log-LinModelo Lin-logModelo Log-Log
(Intercept)955.605 ***6.756 ***938.558 ***6.731 ***
(37.411)   (0.039)   (66.371)   (0.069)   
Experiencia0.202                            
(3.026)                           
exper        0.002                    
        (0.003)                   
log(exper)                8.231    0.020    
                (27.611)   (0.029)   
N935        935        935        935        
R20.000    0.000    0.000    0.001    
Nota: Los resultados deben interpretarse completamente

Elasticidad

Elasticidad

Una medida muy conocida, ahora implica un calculo en econometría.

Code
#Para elasticidad
attach(datos)
(b1hat <- cov(exper,wage)/var(exper)) #Hallar beta de reg
[1] 0.2024031
Code
elasticidad<-b1hat*(exper/sal.hat)
melasticidad<-b1hat*(mean(exper)/mean(wage))  #Forma 1
melasticidad2<-b1hat*(mean(exper)/mean(sal.hat)) #Forma 2

# Fusionar Data
cbind(wage, exper, elasticidad, melasticidad, melasticidad2 )[1:10,]
   wage exper elasticidad melasticidad melasticidad2
1   769    11 0.002324453  0.002443266   0.002443266
2   808    11 0.002324453  0.002443266   0.002443266
3   825    11 0.002324453  0.002443266   0.002443266
4   650    13 0.002745920  0.002443266   0.002443266
5   562    14 0.002956520  0.002443266   0.002443266
6  1400    14 0.002956520  0.002443266   0.002443266
7   600    13 0.002745920  0.002443266   0.002443266
8  1081     8 0.001691584  0.002443266   0.002443266
9  1154    13 0.002745920  0.002443266   0.002443266
10 1000    16 0.003377454  0.002443266   0.002443266
Code
detach(datos)

Otras formas funcionales

Otras formas funcionales

Code
reg1 <- lm(wage ~ exper, data=datos)
reg2 <- lm(wage ~ 0 + exper, data=datos)
reg3 <- lm(wage ~ 1 , data=datos)

# Todo el grupo de regresiones
regfh <- list("Modelo Lineal" = reg1, "Modelo sin constante" = reg2, 
             "Modelo sin explicativa" = reg3)

huxreg(regfh, statistics = c(N = "nobs", R2 = "r.squared"),
       note = "Nota: Son transformaciones simples")
Modelo LinealModelo sin constanteModelo sin explicativa
(Intercept)955.605 ***        957.945 ***
(37.411)           (13.224)   
exper0.202    72.505 ***        
(3.026)   (1.394)           
N935        935        935        
R20.000    0.743    0.000    
Nota: Son transformaciones simples

Gráfico

Grafico de las regresiones

Code
# Gráfico de las 3 regresiones
plot(datos$exper, datos$wage, xlab = "Experiencia en años", ylab = "Salario en millones")
abline(reg1, lwd=2, lty=1)
abline(reg2, lwd=2, lty=2)
abline(reg3, lwd=2, lty=3)
legend("topleft",c("Completo","A traves del origen","Solo la constante"),lwd=2,lty=1:3)

Gracias por su atención!!